package com.learn.rabbit.base;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

/**
 * rabbitmq项目启动类
 *
 * (Producer --> Channel -(Routing Key)-> Exchange -(Binding key)-> Queue  -->Consumer)
 *
 * Broker: 它提供一种传输服务,它的角色就是维护一条从生产者到消费者的路线，保证数据能按照指定的方式进行传输,
 * Exchange：消息交换机,它指定消息按什么规则,路由到哪个队列。
 *          Fanout: 路由广播的形式,将会把消息发给绑定它的全部队列,即便设置了key,也会被忽略.
 *          Direct: RabbitMQ默认的交换机模式,也是最简单的模式.即创建消息队列的时候,指定一个BindingKey.
 *                  当发送者发送消息的时候,指定对应的routing key.当routing key和消息队列的BindingKey一致的时候,消息将会被发送到该消息队列中.
 *          Topic: 前面提到的direct规则是严格意义上的匹配，换言之Routing Key必须与Binding Key相匹配的时候才将消息传送给Queue，
 *                 那么topic这个规则就是模糊匹配，可以通过通配符满足一部分规则就可以传送。它的约定是：
 *                          routing key为一个句点号“. ”分隔的字符串（我们将被句点号“. ”分隔开的每一段独立的字符串称为一个单词）,
 *                          其中“*”用于匹配一个单词，“#”用于匹配多个单词（可以是零个）
 *          headers(基本不用): headers类型的Exchange不依赖于routing key与binding key的匹配规则来路由消息，而是根据发送的消息内容中的headers属性进行匹配。
 *
 * Queue: 消息的载体,每个消息都会被投到一个或多个队列。
 * Binding key: 绑定，它的作用就是把exchange和queue按照路由规则绑定起来.
 * Routing Key: 路由,把channel和exchange按照路由规则绑定起来.
 * vhost:虚拟主机,一个broker里可以有多个vhost，用作不同用户的权限分离。
 * Producer: 消息生产者,就是投递消息的程序.
 * Consumer: 消息消费者,就是接受消息的程序.
 * Channel: 消息通道,在客户端的每个连接里,可建立多个channel.
 *
 * rabbitMQ管理页面访问地址 http://localhost:15672
 *
 * @author zhousiqi
 * @version 1.0.0
 * @date 2019/2/26 11:17
 */
@SpringBootApplication
public class RabbitBaseApplication {

    public static void main(String[] args) {
        SpringApplication.run(RabbitBaseApplication.class, args);
    }

}
